在資料表設計最經常性聽到的名詞就是正規化
常見的正規化名稱為
正規化的執行步驟網路上的資訊很多就不在此描述
若無法記住各正規化的詳細描述與步驟
小弟在設計資料表時主要拿捏要領
以訂單主資料表部分欄位為例
Order.OrderHeader
---------------------------
Id OrderNo Status
---------------------------
1 ORDER001 Processing
2 ORDER002 Finished
3 ORDER003 Cancelled
4 ORDER004 Finished
5 ORDER005 Processing
上每一筆資料列的最大儲存成本為
Orders.OrderHeader
INT + CHAR(8) + VARCHAR(10) = 4+8+12 = 24 (Byte)
Order.OrderStatus
--------------------------------
Id Name
--------------------------------
1 Processing
2 Finished
3 Cancelled
Order.OrderHeader
--------------------------------
Id OrderNo StatusId
--------------------------------
1 ORDER001 1
2 ORDER002 2
3 ORDER003 3
4 ORDER004 2
5 ORDER005 1
每一筆資料列的最大儲存成本為
Order.OrderStatus
TINYINT + VARCHAR(10) = 1+12 = 13 (Byte)
Order.OrderHeader
INT + CHAR(8) + TINYINT = 4+8+1 = 13 (Byte)
可以發現 Order.OrderHeader 資料表的儲存成本降低了
當資料量越龐大的情況下
此設計所節省的儲存成本就會更明顯
透過正規化設計能夠有效的減少儲存成本
雖然儲存成本相較於記憶體或處理起來說是低廉
但是在存取成本上
從硬碟存取資料的成本
相較記憶體就高了許多
當然
必要時也得對資料表進行非正規化設計